package com.springcloud.hystrix;

import com.springcloud.model.User;
import com.springcloud.service.ProviderService;
import feign.hystrix.FallbackFactory;
import org.checkerframework.checker.units.qual.C;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;

/**
 * 自定义服务容器工厂类,这个类将创建具体的服务熔断器类对象,必须要实现工厂接口
 * 注意:
 *   1.父接口中的泛型用于决定为哪个具体的声明式服务消费接口提供熔断处理
 *   2.当前类必须定义到Spring的应用上下文容器中
 */
@Component
public class MyFallbackFactory implements FallbackFactory<ProviderService> {
   //用于返回某个声明式服务消费接口的熔断器类对象 参数 为触发服务熔断时的异常信息
    public ProviderService create(Throwable throwable) {
        return new ProviderService() {
            @Override
            public String test() {
                return String.format("test方法触发服务熔断了<br>异常类型:%s<br>异常信息:%s",throwable.getClass(),throwable.getMessage());
            }

            @Override
            public String getUser01() {
                return null;
            }

            @Override
            public Map getUser02() {
                return null;
            }

            @Override
            public User getUser03() {
                return null;
            }

            @Override
            public List getUserList01() {
                return null;
            }

            @Override
            public List<User> getUserList02() {
                return null;
            }

            @Override
            public User params01(String sname, Integer age) {
                return null;
            }

            @Override
            public User params02(String sname, Integer age) {
                return null;
            }

            @Override
            public User paramsObj(User user) {
                return null;
            }

            @Override
            public List<User> paramsList(List<User> list) {
                return null;
            }

            @Override
            public User paramsJson(String paramsJson) {
                return null;
            }
        };
    }
}
